package com.owen.cyclic.barrier.simple5;

import java.util.concurrent.CyclicBarrier;

/**
 *  示例5：其中一个人愿意等待5秒
 *  基于示例1，员工0只愿意等待5秒，5秒后如果大家还没到期，自己要开吃了，员工0开吃，其他人会怎么样呢？
 *
 *  从输出结果中我们可以看到：1等待5秒之后，开吃了，其他等待人都开吃了，后面来的人不等待，直接开吃了。
 *
 *  结论：
 *  1. 等待超时的方法
 *  public int await(long timeout, TimeUnit unit) throws InterruptedException,BrokenBarrierException,TimeoutException
 *
 *  2. 内部有一个人把规则破坏了（等待超时），其他人都不按规则来了，不会等待了
 *  3. 等待超时的线程，await方法会触发TimeoutException异常，然后被唤醒向下运行
 *  4. 其他等待中或后面到达的线程，会在await()方法上出发BrokenBarrierException异常，然后继续运行
 */
public class Main5 {

    private static CyclicBarrier cyclicBarrier=new CyclicBarrier(10);

    public static void main(String[] args) {
        for (int i = 0; i < 10; i++) {
            new Thread(new MyRunnable5(cyclicBarrier,"员工"+i,i)).start();
        }
    }

}
